package com.xiaozhen.common.core.utils;

import com.alibaba.ttl.TransmittableThreadLocal;
import com.xiaozhen.common.core.constant.UserConstants;
import com.xiaozhen.common.core.domain.system.SysRole;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;

import java.util.Map;

/**
 * HISTORY
 *
 * @author zhenweisheng
 * @date 2021/8/17 15:59
 * @description:
 */
public class UserUtils {

    private static final ThreadLocal<Map<String, String>> THREAD_LOCAL_USER = new TransmittableThreadLocal<Map<String, String>>();


    /**
     * 设置用户信息
     *
     * @param userInfo 用户信息
     */
    public static void setCurrentUserInfo(Map<String, String> userInfo) {
        //暂时写死  权限完成后改善
        THREAD_LOCAL_USER.set(userInfo);
    }

    /**
     * 如果没有登录，返回null
     *
     * @return 用户名
     */
    public static Long getCurrentUserId() {
        if (THREAD_LOCAL_USER.get() == null) {
            return null;
        }
        String userId = THREAD_LOCAL_USER.get().get(UserConstants.USER_HEADER);
        if (StringUtils.isEmpty(userId)) {
            return null;
        }
        try {
            return Long.parseLong(userId);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 如果没有登录，返回null
     *
     * @return 用户名
     */
    public static Long getCurrentTenantId() {
        if (THREAD_LOCAL_USER.get() == null) {
            return null;
        }
        String tenantId = THREAD_LOCAL_USER.get().get(UserConstants.TENANT_HEADER);
        if (StringUtils.isEmpty(tenantId)) {
            return null;
        }
        try {
            return Long.parseLong(tenantId);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 是否为管理员
     *
     * @param userId 用户ID
     * @return 结果
     */
    public static boolean isAdmin(Long userId) {
        return userId != null && 1L == userId;
    }

    /**
     * 是否为管理员
     *
     * @param role 角色
     * @return 结果
     */
    public static boolean isAdminRole(SysRole role) {
        return role.getRoleId() != null && 1L == role.getRoleId();
    }
}
